package org.su.generalmvc.annotaion;


import org.su.generalmvc.core.ActionConfig;
import org.su.generalmvc.core.IXsshApplicationContext;
import org.su.generalmvc.render.IRender;

/**
 * 视图类型（json，velocity）
 * 
 * @author yangchuan 2010-07-28 11:08:01
 */
public enum ViewType {

    /**
     * 系统通过protobuf传回byte数据
     */
    pbyte{

        @Override
        public void setRender(IXsshApplicationContext context, ActionConfig ac,String view){
            ac.setRender((IRender) context.getBean(context.getConfig().getContextPrefix() + "pbyte"));
            ac.setExcptionRender((IRender) context.getBean(context.getConfig().getContextPrefix() +"pbyteException"));
        }

    },
	/**
	 * 系统通过模板返回结果页面
	 */
	velocity{
		
		@Override
		public void setRender(IXsshApplicationContext context,ActionConfig ac,String view){
			ac.setDefaultViewPath(view + ".vm");
			ac.setRender((IRender) context.getBean(context.getConfig().getContextPrefix() +"velocity"));
			ac.setExcptionRender((IRender) context.getBean(context.getConfig().getContextPrefix() +"velocityException"));
		}
		
	},
	/**
	 * 系统通过ajax传回json数据
	 */
	json{
		
		@Override
		public void setRender(IXsshApplicationContext context, ActionConfig ac,String view){
			ac.setRender((IRender) context.getBean(context.getConfig().getContextPrefix() +"json"));
			ac.setExcptionRender((IRender) context.getBean(context.getConfig().getContextPrefix() +"jsonException"));
		}
		
	},
	/**
	 * 流类型，一般用户文件下载或流输出
	 */
	stream{
		
		@Override
		public void setRender(IXsshApplicationContext context,ActionConfig ac,String view){
			ac.setRender((IRender) context.getBean(context.getConfig().getContextPrefix() +"stream"));
			ac.setExcptionRender((IRender) context.getBean(context.getConfig().getContextPrefix() +"velocityException"));
		}
		
	},
	/**
	 * jsp类型
	 */
	jsp{
		@Override
		public void setRender(IXsshApplicationContext context,ActionConfig ac,String view){
			ac.setDefaultViewPath(view + ".jsp");
			ac.setRender((IRender) context.getBean(context.getConfig().getContextPrefix() +"jsp"));
			ac.setExcptionRender((IRender) context.getBean(context.getConfig().getContextPrefix() +"jspException"));
		}
		
	},
	/**
	 * 用户自定义视图类型，必须和RequestMapping的userDefined联合使用
	 */
	userDefined{
		
		@Override
		public void setRender(IXsshApplicationContext context,ActionConfig ac,String view){
			ac.setDefaultViewPath(view);
			String name = ac.getRm().userDefined();
			ac.setRender((IRender) context.getBean(name));
			ac.setExcptionRender((IRender) context.getBean(name+"Exception"));
		}
		
	};
	
	/**
	 * 设置视图类型下的render渲染器
	 * @param context
	 * @param ac
	 * @param view
	 */
	public void setRender(IXsshApplicationContext context,ActionConfig ac,String view){
		
	}
	
	
}
